プログラミング不要! Codeship で GitHub と Lambda をつなぐ
こんにちは、ももんが大好きの小山です。
突然ですが、CodePipeline の Lambda 非対応について疑問をもったことはありませんか? 複数のメンバーで Lambda 関数を開発しようと思ったとき、バージョニングとエイリアスでは不足が生じるかもしれません。慣れ親しんだ GitHub から、もっとシームレスにデプロイできたらいいのに... そんな願いをかなえてくれるのが、きょうご紹介する Codeship です。以下の内容は1行たりともコードが書けない小山が書いていますから、怖がらずにぜひ試してみてください!
サインアップとプロジェクトの作成
幸い Codeship には無償プランがありますから、公式サイトからサインアップします。サインインしたら、Let's do it! を押して進みましょう。
今回は GitHub レポジトリでコミットした Lambda 関数をデプロイしたいので、Connect with GitHub repository を選択します。
Codeship が GitHub へ接続できるように Authorize application して...
既存の Lambda 関数のために作成しておいた GitHub レポジトリ (ここでは NewFunction) を選択します。Codeship で新規の Lambda 関数を作成することはできません!
ヒント: AWS Documentation
次のページではデプロイ前のスクリプトを作成できますが、そのまま Save and go to dashboard を押してください。
以下のような画面になれば、Lambda 関数に対するプロジェクトを作成することができました。おめでとうございます!
環境変数とスクリプトの設定
Lambda 関数のデプロイには AWS CLI を使いますから、アクセスキーを用意する必要があります。新しい IAM ユーザーを作成し、以下のようなポリシーを割り当ててください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration", "lambda:InvokeFunction", "lambda:GetFunction", "lambda:PublishVersion", "lambda:UpdateAlias" ], "Resource": [ "arn:aws:lambda:us-east-1:123456789012:function:NewFunction" ] } ] }
アクセスキーの用意ができたら、Codeship プロジェクトに戻って Environment Variables へ進みましょう。
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
の3つを設定して Save Configuration を押したら、Deployment ページへ移動します。
以下のページでは、デプロイのために監視するブランチを指定します。今回は master としました。
Save Pipeline Settings を押すと、Configure Your Deployment Pipelines へ移動します。下へスクロールして、Custom Script を選択してください。
いよいよデプロイに使うスクリプトを指定します。以下の例を貼り付けたら、NewFunction
となっている箇所を実際の名称に書き換えてください。
pip install awscli zip -r NewFunction.zip * aws lambda update-function-code --function-name NewFunction --zip-file fileb://NewFunction.zip version=`aws lambda publish-version --function-name NewFunction | jq -r .Version` aws lambda update-alias --function-name NewFunction --function-version $version --name PROD aws lambda get-function --function-name NewFunction aws lambda invoke --function-name NewFunction --payload "$(cat data.json)" --qualifier PROD lambda_output.txt cat lambda_output.txt
Create Deployment を押して、以下のような画面になれば完了です。おつかれさまでした!
デプロイ
Lambda 関数のレポジトリを開いて、master ブランチのコードに変更を加えてみます。
ぼけっとしていたところ、すでにデプロイが成功しています! どうやら、Codeship がブランチに対するコミットを検知するのは一瞬のようです。
Preparing Virtual Machine とあります。これ、Lambda と変わらないんじゃ...
それでもコードは書かない
いかがでしたか? 以上の手順を実際に試してみた方には、変更を加えたブランチの Lambda 関数が面白いようにデプロイされる様子をご覧いただけたかと思います。これこそプログラミング不要という世界の真髄ではありませんか! これからも小山は、いかにしてコードを書くことなく仕事を全うできるかというテーマについて追い求めていきたいと思います。おたのしみに!
元ネタ
Integrating AWS Lambda with Codeship - via @codeship | via @codeship
Deploy to AWS Lambda | Codeship Documentation
きょうの履歴から
AWS Lambda とは - AWS Lambda
バージョニング、エイリアス、リソースポリシー - AWS Lambda
ステップ 2: HelloWorld Lambda 関数を作成してコンソールを探る - AWS Lambda
ステップ 2.2: Lambda 関数を手動で呼び出し、結果、ログ、メトリックスを確認する - AWS Lambda